<?php
 
use Doctrine\Common\Collections\ArrayCollection;

class Usuarios_CajadiariaController extends Zend_Controller_Action {

    private $_movimientoDao;
    private $_cajaDiariaDao;
    private $_referenciaDao;

    public function init() {
        $auth = Zend_Auth::getInstance();
        if ($auth->hasIdentity()) {
            if (!empty($auth->getIdentity()->id)) {
                $usuarioDao = new Doctrine_Model_UsuariosDoctrineDao();
                $this->view->usuario = $usuarioDao->obtenerPorId($auth->getIdentity()->id);
            }
        } else {
            $this->_helper->redirector('index', 'login', 'admin');
        }
        
        /* Colores */
        $colores = array(
            '5b92d6' => array('5b92d6','8fbaef'), //azul
            'd6d65b' => array('d6d65b','bfbf3f'), //amarillo
            '51ad56' => array('51ad56','73be78'), //verde
            'db6f70' => array('db6f70','e59899'), //rojo
            '5e71a0' => array('5e71a0','8e9cbc'), //azul oscuro
            'd68e5b' => array('d68e5b','e8a97c'), //naranja
            '92989f' => array('92989f','bbbec3'));//gris
        $this->view->colorSucursal = $colores[$this->view->usuario->getSucursal()->getColor()];
        /* Colores */
        
        $this->_referenciaDao = new Doctrine_Model_Referencias();
        $this->_cajaDiariaDao = new Doctrine_Model_CajaDiariaDao();
        $this->_movimientoDao = new Doctrine_Model_MovimientoDao();
        $this->view->referenciasDao= new Doctrine_Model_ReferenciasDoctrineDao();

        $this->view->headScript()->appendFile($this->view->baseUrl() . '/js/credito_registrar.js');
    }

    public function indexAction() {

        $this->view->titulo = "Caja Diaria";
        $this->view->categorias = $categoriasMovimietos = $this->_referenciaDao->obternerCategorias();
        $categoriasMovimietos = $categoriasMovimietos->toArray();
        usort($categoriasMovimietos, array("Doctrine_Model_Entities_CategoriaMovimiento", "cmp_categorias"));
        $this->view->categorias = $categoriasMovimietos;
        
        $this->view->sucursales = Doctrine_Model_Referencias::obtenerTodas('Doctrine_Model_Entities_Sucursal');
        $datos = $this->getRequest()->getParams();
        $sucursalId = isset($datos['sucursal_id']) ? $datos['sucursal_id'] : null;
        if ($this->getRequest()->isPost()) {
            
            $fechaInicio = Doctrine_Model_Utilidad::formatoFechaBD($datos['fecha_inicio']);
            $fechaFin = Doctrine_Model_Utilidad::formatoFechaBD($datos['fecha_fin']);
            $this->view->fecha_inicio = $datos['fecha_inicio'];
            $this->view->fecha_fin = $datos['fecha_fin'];
        } else {
            $fechaInicio = new DateTime();
            $fechaFin = new DateTime();
            $this->view->fecha_inicio = $fechaInicio->format('d/m/Y');
            $this->view->fecha_fin = $fechaFin->format('d/m/Y');
            $datos['categoria_id']=0;
            $datos['fecha_inicio']=$fechaInicio->format('d/m/Y');
            $datos['fecha_fin'] =$fechaInicio->format('d/m/Y');
            $sucursalId=$this->view->usuario->getSucursal()->getId();
        }
        $categoria_id=$datos['categoria_id'];
        
        if(empty($sucursalId)){
            $sucursalId=$this->view->usuario->getSucursal()->getId();
        }
 
        $movimientosTotalesHasta = $this->_movimientoDao->obtenerTotaldeMovimientosHasta($fechaInicio->format('Y-m-d') . " 00:00:00",$sucursalId,$categoria_id);        
        $inicio=0;
        foreach ($movimientosTotalesHasta as $m) {
            if ($m->getId() == 18021 || $m->getId() == 18022 || $m->getId() == 18023): continue; endif;
            if (/*$m->getCategoria()->getId() != 24 && $m->getCategoria()->getId() != 25*/ true): /* mod de juicios tito */
                $inicio = $m->devolverMonto($inicio);
            endif;
        }
        $entradas = $this->_movimientoDao->obtenerEnrtadasEntreFechas($fechaInicio->format('Y-m-d') . " 00:00:00", $fechaFin->format('Y-m-d') . " 24:59:59",$sucursalId,$categoria_id);
        $salidas = $this->_movimientoDao->obtenerSalidasEntreFechas($fechaInicio->format('Y-m-d') . " 00:00:00", $fechaFin->format('Y-m-d') . " 24:59:59",$sucursalId,$categoria_id);

        $hoy = new DateTime();
        $ayer = $hoy->sub(new DateInterval('P1D'));
        $entradasReturn = new ArrayCollection();
        $salidasReturn = new ArrayCollection();
        $entradasReturn2 = new ArrayCollection();
        $salidasReturn2 = new ArrayCollection();

        $totalEntradas = 0;
        $totalSalidas = 0;
        $totalesPorCategoria = null;

        foreach ($entradas as $entrada) {
            //if ($entrada->getCategoria()->getId() == 24): continue; endif;
            if ($entrada->getId() == 18021 || $entrada->getId() == 18022 || $entrada->getId() == 18023): continue; endif;
            $totalEntradas = $totalEntradas + $entrada->getMonto();
            if (isset($totalesPorCategoria["{$entrada->getCategoria()->getDescripcion()}"])):
                $totalesPorCategoria["{$entrada->getCategoria()->getDescripcion()}"] = $totalesPorCategoria["{$entrada->getCategoria()->getDescripcion()}"] + $entrada->getMonto();
            else:
                $totalesPorCategoria["{$entrada->getCategoria()->getDescripcion()}"] = $entrada->getMonto();
            endif;
            if ($datos['categoria_id'] != 0) {
                if ($entrada->getCategoria()->getId() == $datos['categoria_id']) {
                    $entradasReturn->add($entrada);
                }
            } else {
                $entradasReturn2->add($entrada);
            }
        }

        foreach ($salidas as $salida) {
            //if ($salida->getCategoria()->getId() == 25): continue; endif;
            $totalSalidas = $totalSalidas + $salida->getMonto();
            if (isset($totalesPorCategoria["{$salida->getCategoria()->getDescripcion()}"])):
                $totalesPorCategoria["{$salida->getCategoria()->getDescripcion()}"] = $totalesPorCategoria["{$salida->getCategoria()->getDescripcion()}"] + $salida->getMonto();
            else:
                $totalesPorCategoria[$salida->getCategoria()->getDescripcion()] = $salida->getMonto();
            endif;
            
            if ($datos['categoria_id']!= 0) {
                if ($salida->getCategoria()->getId() == $datos['categoria_id']){
                    $salidasReturn->add($salida);
                }
            } else {
                $salidasReturn2->add($salida);
            }
        }

        /* parameters */
        if ($datos['categoria_id']!=0) {
            $this->view->entradas = $entradasReturn;
            $this->view->salidas = $salidasReturn;
        } else {
            $this->view->entradas = $entradasReturn2;
            $this->view->salidas = $salidasReturn2;
        }
        
        $this->view->muestroMonto=false;
        $hoy = new DateTime();
        $this->view->muestroMonto=true;
        $this->view->categoria_id = $datos['categoria_id'];
        $this->view->sucursal_id=$sucursalId;
        $this->view->totalEntradas = $totalEntradas;
        $this->view->totalSalidas = $totalSalidas;
        $this->view->subtotal = $totalEntradas - $totalSalidas;
        $this->view->inicio = $inicio;
        $this->view->total = $inicio+$this->view->subtotal;
        $this->view->totalesPorCategoria = $totalesPorCategoria;
        
    }
    
    public function nuevomovimientoAction() {
        $this->_helper->layout()->setLayout("layout_pagos");
        $this->view->titulo = "Caja Diaria";
        $this->view->categorias = $this->_referenciaDao->obternerCategorias();
        $this->view->sucursales = $this->_referenciaDao->obternerSucursales();
        $datos = $this->getRequest()->getParams();
        if ($this->getRequest()->isPost()) {
            if (!empty($datos['concepto']) && !empty($datos['monto'])) {
                if ($datos['tipo_movimiento'] == 'E') {
                    $movimiento = new Doctrine_Model_Entities_Entrada();
                } else {
                    $movimiento = new Doctrine_Model_Entities_Salida();
                }
                $movimiento->setDescripcion($datos['concepto']);
                $movimiento->setMonto($datos['monto']);
                $movimiento->setCategoria($this->_referenciaDao->obtenerPorId('Doctrine_Model_Entities_CategoriaMovimiento', $datos['categoria_id']));
               
                if($datos['sucursal_id']!=""){
                    $usuariosDao= new Doctrine_Model_UsuarioDoctrineDao();
                    $usuariosDeSucursal=$usuariosDao->obtenerPorSucursalId($datos['sucursal_id']);
                    foreach ($usuariosDeSucursal as $us) {
                        $movimiento->setUsuario($us);break;
                    }
                    
                    
                }else{
                    $movimiento->setUsuario($this->view->usuario);
                }
               
                if ($this->_movimientoDao->guardar($movimiento)) {
                    $this->view->error = false;
                    $this->view->mensaje = "Moviemto Guardado con exito";
                } else {
                    $this->view->error = true;
                    $this->view->mensaje = "Problemas al intentar guardar el movimiento";
                }
            } else {
                $this->view->error = true;
                $this->view->mensaje = "Problemas al intentar guardar el movimiento";
            }
        } else {
            if (!empty($datos['tipo_movimiento'])) {
                if ($datos['tipo_movimiento'] == 'E') {
                    $titulo = "Nueva Entrada";
                } else {
                    $titulo = "Nueva Salida";
                }
            }
        }

        $this->view->subtitulo = $titulo;
        $this->view->tipo_movimiento = $datos['tipo_movimiento'];
    }

    public function actualizarAction() {

        $fechaInicio = new DateTime();
        $fechaFin = new DateTime();
        $this->view->fecha_inicio = $fechaInicio->format('d/m/Y');
        $this->view->fecha_fin = $fechaFin->format('d/m/Y');

        $entradas = $this->_movimientoDao->obtenerEnrtadasEntreFechas($fechaInicio->format('Y-m-d') . " 00:00:00", $fechaFin->format('Y-m-d') . " 24:59:59");
        $salidas = $this->_movimientoDao->obtenerSalidasEntreFechas($fechaInicio->format('Y-m-d') . " 00:00:00", $fechaFin->format('Y-m-d') . " 24:59:59");
    }

}
